package com.pc.web.member;

import java.util.List;
import javax.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.codec.Base64;
import org.springframework.stereotype.Repository;
import org.springframework.ui.Model;
import java.io.UnsupportedEncodingException;

@Repository
public class MemberService {
	@Autowired MemberDao dao;
	
	//비밀번호 암호화
	public MemberBeans chagneEncode(MemberBeans beans){
		String pwd = beans.getMember_password();
		String strEncode = null;		
		try {
			byte[] encodeByte = Base64.encode(pwd.getBytes("UTF-8"));
			strEncode = new String(encodeByte);			
		} catch (UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}		
		beans.setMember_password(strEncode);
		return beans;
	}	
	// 로그인 처리
	public boolean userSession(MemberBeans beans, HttpSession session) {
		beans=chagneEncode(beans);
		boolean result = false;		
		if (dao.getUser(beans) != 0) {
			session.setAttribute("user", beans.getMember_id());
			result = true;
		}
		return result;
	}
	// 로그아웃 처리
	public void removeUser(HttpSession session) {
		session.removeAttribute("user");
	}
	// 회원가입 처리
	public void join(MemberBeans beans,HttpSession session,Model model)  {		
		beans=chagneEncode(beans);
		dao.memberJoin(beans);
		model.addAttribute("msg", "가입완료");
		session.setAttribute("user", beans.getMember_id());
	}
	//회원 가입 & 정보수정에 필요한 이메일,비밀번호 질문,전화번호 리스트
	public void joinList(Model model) {
		// TODO Auto-generated method stub
		List<String> emailCode = dao.emailCode();
		List<String> telCode = dao.telCode();
		model.addAttribute("emailcode", emailCode);		
		model.addAttribute("telcode", telCode);	
	}
	//로그인된 회원정보 가져오기
	public void getUserProfile(Model model, HttpSession session,MemberBeans beans) {
		//세션에서 아이디 가져오기
		String userId = (String) session.getAttribute("user");		
		//회원정보 가져오기
		beans = dao.getProfile(userId);
		model.addAttribute("profile", beans);
	}
	//회원탈퇴
	public void leave(MemberBeans beans,Model model,HttpSession session){
		beans=chagneEncode(beans);
		int x=dao.leave(beans);
		//비밀번호 오류시
		if(x!=1){
			model.addAttribute("msg", "비밀번호X");
			return;
		}
		model.addAttribute("msg", "회원탈퇴");
		session.removeAttribute("user");
	}
	//회원 가입 아이디 중복체크
	public void idCheck(MemberBeans beans, Model model) {
		if (dao.idCheck(beans) != 0) {
			model.addAttribute("msg", "1");
			model.addAttribute("id", beans.getMember_id());			
		}
		model.addAttribute("id", beans.getMember_id());
	}
	//리스트
	public void list(Model model,MemberBeans beans) {
		// TODO Auto-generated method stub		
		int page = 1;           // 현재 페이지
	    int pageSize = 10;      // 페이지당 글 개수
	    int firstRow = 0;       // 보여질 첫번째 글순서
        int lastRow = 0;        // 보여질 마지막 글순서
        int totSize = 0;        // 전체 글 개수
        int totPage = 0;        // 전체 페이지수
        int pageListSize = 5;   // 페이징에서 보여줄 페이지 개수
        int firstPage = 0;      // 보여질 첫번째 페이지
        int lastPage = 0;       // 보여질 마지막 페이지
        String strPage = beans.getPage();        
        
        if(strPage != null && !"".equals(strPage)){
            page = Integer.parseInt(strPage);
        }
        if(beans.getStatus() == null){
        	beans.setStatus("4");
        }
        if("".equals(beans.getSearchWord())){
            beans.setSearchWord(null);
        }
        lastRow = page * pageSize;
        firstRow = lastRow - (pageSize - 1);
        beans.setFirstRow(firstRow);
        beans.setLastRow(lastRow);
        //리스트 사이즈
        totSize = dao.getListSize(beans);
        totPage = (totSize-1)/pageSize + 1;  
        firstPage = page - (page-1)%pageListSize;
        lastPage = firstPage + (pageListSize-1);
        if(totPage < lastPage)
            lastPage = totPage; 
        // 리스트 
        List<MemberBeans> list;
        list=dao.getList(beans);
        model.addAttribute("memberList", list);
        model.addAttribute("page", page);
        model.addAttribute("totPage", totPage);
        model.addAttribute("firstPage", firstPage);
        model.addAttribute("lastPage", lastPage);
		model.addAttribute("status", beans.getStatus());
		model.addAttribute("searchWord", beans.getSearchWord());
	}	
	//회원 아이디 찾기
	public void idFind(MemberBeans beans, Model model) {
		List<String> idList=dao.idFind(beans);
		model.addAttribute("idList", idList);
	}
	//회원 비밀번호 찾기
	public void passFind(MemberBeans beans, Model model) {
		String pass=dao.passFind(beans);
		byte[] decodeByte = null;
		//비밀번호 복호화
		try {
			decodeByte = Base64.decode(pass.getBytes("UTF-8"));
		} catch (UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		String strDecode = new String(decodeByte);
		model.addAttribute("passFind", strDecode);
	}
	//회원 정보 수정
	public void update(MemberBeans beans, Model model) {		
		beans=chagneEncode(beans);
		dao.update(beans);
		model.addAttribute("msg", "수정완료");
		
	}
}
